1 ; *** INTELLIGENTE FLOPPY **** 2 ; **************************** 3 ; * WRITTEN BY STEFAN ROTHER * 4 ; * FRAUENZELLSTRASSE 26 * 5 ; * 8400 REGENSBURG * 6 ; **************************** 7 ; * (C) 1986 MARKT&TECHNIK * 8 ; * VERLAG AG * 9 ; **************************** 10 .BA$CE18 ;START BEI 52760 20 JSR$AEFD;AUF KOMMA PRUEFEN 30 JSR$B79E;8 BIT-ZAHL NACH X HOLEN 60 STXZ1;UND ZWISCHENSPEICHERN 65 LDA#07;MASKE ZUM AUSFILTERN 70 ANDZ1;VON BIT 0-2 ERSTELLEN 74 ; 75 ;SPRUNGTABELLE 76 ; 80 BNEY1;BEI 0 85 JMPLOAD1;PRG MIT ',8' LADEN 90 Y1 CMP#01;MIT 1 VERGLEICHEN 100 BNEY2;WENN 1 ,DANN 105 JMPLOAD2;PRG MIT ',8,1' LADEN 110 Y2 CMP#02;MIT 2 VERGLEICHEN 120 BNEY3;WENN 2 ,DANN 125 JMPSAVE;ZUR SAVEROUTINE SPRINGEN 130 Y3 CMP#03;MIT 3 VERGLEICHEN 140 BNEY4;WENN 3 ,DANN 145 JMPGOTO;'GOTO'-ROUTINE AUFRUFEN 150 Y4 CMP#04;UND DASSELBE MIT 4 160 BNEY5;WENN 4,DANN 165 JMPJUMP;'JMP'-ASSEMBLERBEFEHL 170 Y5 RTS;WENN KEIN MODUS,DANN ZURUECK 180 ; 185 ;ALGORITHMUS ZUM AUSWERTEN 186 ;EINES DISKETTENWECHSELS 188 ; 190 FLOPPY LDA#08;PARAMETER FUER 200 LDX#08;'OPEN 8,8,15' 210 LDY#15;SETZEN 220 JSR$FFBA;FILE VORBEREITEN 230 LDA#00;KEIN FILENAME 240 JSR$FFBD;FILENAMEN VORBEREITEN 250 JSR$FFC0;'OPEN' 260 JMPA;ZUR DATENAUSWERTUNG 270 X LDX#08;FUER KANAL 8 280 JSR$FFC9;CMD OUT AKTIVIEREN 290 LDX#00;ZAEHLER AUF NULL 300 B1 LDAT1,X;UND VON FLOPPY 310 JSR$FFD2;PER BEFEHLSSEQUENZ 320 INX;VON 6 ZEICHEN 330 CPX#06;INHALT VON $1C00 340 BNEB1;ABFRAGEN 350 JSR$FFCC;CMD OFF 360 Y LDX#08 370 JSR$FFC6;CMD IN AKTIVIEREN 380 JSR$FFCF;BESAGTES BYTE HOLEN 385 PHA;UND ZWISCHENSPEICHERN 390 JSR$FFCC;CMD INAKTIVIEREN 395 PLA;BYTE ZURUECKHOLEN 400 RTS;ENDE DES UNTERPRG'S 'DATEN HOLEN' 410 ; 411 ;FORTFUEHRUNG DES HAUPTPROGRAMMS 412 ; 415 A JSRBIT05;BIT 5=1 (DIKETTENWECHSEL) ? 417 JSRLED;JA,DANN JE NACH BIT 6 LED AN 420 JSRX;HOLE AKTUELLES INFOBYTE 430 ANDZ2;UND FILTERE LICHSCHRANKENBIT 440 BNEA;HERAUS-BEI 1 WARTEN 450 ; 460 B JSRX 470 ANDZ2 480 BEQB;WARTE BIS BIT=1,LS-UNTERBRECHUNG 485 ; 490 C JSRLED;EINSPRUNG,WENN VORHER BIT5=0 500 JSRX 510 ANDZ2 520 BNEC;WARTE,BIS LS FREI 530 ; 540 LDAZ1;BIT 7 DES BEFEHLBYTES TESTEN 550 BPLF;BEI 1 SCHREIBSCHUTZ 560 ; 570 J LDX#$FF;WARTESCHLEIFE 580 E LDY#$FF;WEGEN SCHREIBSCHUTZ 590 D DEY 600 BNED 610 DEX 620 BNEE 630 JMPG 640 ; 650 F JSRX;WENN KEIN SCHREIBSCHUTZ, 660 ANDZ2;DANN AUF KERBE 670 BEQF;WARTEN 680 ; 690 G LDX#$02;UNBEDINGTE WARTESCHLEIFE 700 K LDY#$A0 704 I DECZ5 706 BNEI 710 H DEY 720 BNEI 730 DEX 740 BNEK 745 ; 750 ;ROUTINE ,DIE DEN MOTOR DER FLOPPY EINSCHALTET 755 ;UND AUF GESCHLOSSENES LAUFWERK PRUEFT 756 ; 760 LDX#08;KANAL 8 766 ; 770 JSR$FFC9;FUER CMD OUT 780 LDX#00 790 B2 LDAT2,X 800 JSR$FFD2 810 INX 820 CPX#05;LAENGE DES BEFEHLS 830 BNEB2 840 JSR$FFCC;CMD INAKTIVIEREN 841 LDX#08;NOCHMALS FUER NEUE ANWEISUNG 842 JSR$FFC9;AKTIVIEREN,UM 843 LDX#00;DER FLOPPY EINE KURZE 844 B4 LDAT4,X;INITIALISIERUNGZEIT 845 JSR$FFD2;ZU GESTATTEN 846 INX 847 CPX#06;DIEMAL 6 BEFEHLBYTES 848 BNEB4 849 JSR$FFCC;KANAL 8 INAKTIVIEREN 850 JSRY;LAUFWERK SCHON EINSATZBEREIT ? 860 CMP#$FF 870 BEQG;NEIN 880 ; 890 LDA#08 900 JSR$FFC3;CLOSE 8 910 RTS;ENDE DER AUSWERTUNG 1470 ; 1480 ;HIER WIRD DAS HAUPTPROGAMM JE NACH 1490 ;BEFEHLSBYTE WEITERGEFUEHRT 1495 ; 1500 LOAD1 LDA#00;KENNZEICHEN FUER 1510 STAKK+1;'LOAD ,8' 1520 JMPLOAD;ZUR LADEROUTINE 1540 LOAD2 LDA#01;ODER FUER ABSOLUTES LADEN 1550 STAKK+1;'LOAD ,8,1' 1555 LOAD JSR$AEFD;PRUEFT AUF KOMMA 1560 JSRFLOPPY;AUF DISKETTENWECHSEL WARTEN 1575 JSRGET;FILENAMEN HOLEN 1576 JMPLD;UND LADEN 1580 GET JSR$AD9A;VORAUSWERTEN UND 1590 JSR$B6A3;AUSWERTEN DES FILENAMENS 1600 STAZ4;LAENGE, 1610 STXLO;LO-ADRESSE UND 1620 STYHI;HI-ADRESSE MERKEN 1700 RTS;ZURUECK 1710 ;--- 1720 GOTO JSR$AEFD;AUF KOMMA PRUEFEN 1730 JSRFLOPPY;AUF DISKETTENWECHSEL WARTEN 1750 JSR$AD8A;SPRUNGADRESSE FUER 'GOTO' HOLEN 1760 JSR$B7F7;IN 16 BIT ZAHL WANDELN 1770 JSR$A8A3;EINSPRUNG IN DIE 'GOTO'-ROUTINE 1780 JMP$A7AE;UND ZUR INTERPRETERSCHLEIFE 1790 ; 1800 JUMP JSR$AEFD;AUF KOMMA PRUEFEN 1810 JSRFLOPPY;AUF DISKETTENWECHSEL WARTEN 1830 JSR$AD8A;SPRUNGADRESSE FUR 'JMP' HOLEN 1840 JSR$B7F7;IN 16 BIT ZAHL WANDELN 1846 LDA#$A7;STARTADRESSE DES BASIC- 1847 PHA 1848 LDA#$AE;INTERPRETERS AUF STACK 1849 PHA 1850 JMP($14);UND ZUM MASCHINENPROGRAMM 1860 ; 1861 SAVE LDAZ1;WENN SAVE UND SCHREIB- 1863 BPLON;SCHUTZ ZUSAMMEN,DANN 1865 JSR$B248;'ILLEGAL QUANTITY ERROR' 1870 ON JSR$AEFD;AUF KOMMA PRUEFEN 1880 JSRFLOPPY;AUF DISKETTENWECHSEL WARTEN 1900 JSRGET;FILENAMEN HOLEN 1910 LDX#08;GERAETEADRESSE 8 1920 JSR$FFBA;FILE VORBEREITEN 1930 LDXZ4;LAENGE 1940 LDXLO;UND ADRESSE DES FILE- 1950 LDYHI;NAMENS HOLEN 1960 JSR$FFBD;FILENAMEN VORBEREITEN 1965 JSRGET16;16 BIT STARTADRESSE FUER SAVE 1967 STX$FE;MERKEN 1969 STY$FF 1971 JSRGET16;16 BIT ENDADRESSE FUER SAVE 1973 LDA#$FE;STEHT BEI $FE/$FF 1975 JMPCONT 1976 ; 1977 ;ROUTINE ZUM HOLEN EINER 16 BIT ZAHL UND AUSWERTUNG 1978 ; 1979 GET16 JSR$AEFD;KOMMA? 1981 JSR$AD8A;16 BIT ZAHL HOLEN 1983 JSR$B7F7;UND UMWANDELN 1985 LDX$14;LO-BYTE 1987 LDY$15;HI-BYTE DER ZAHL 1989 RTS;ENDE DER UNTERROUTINE 1990 ; 2000 CONT JSR$FFD8;'SAVE' 2010 RTS;ZURUECK ZU BASIC 2015 ; 2020 ;LADEN EINES PROGRAMMS 2025 ; 2030 LD LDX#08 2040 KK LDY#01 2050 JSR$FFBA;FILE VORBEREITEN 2060 LDAZ4 2070 LDXLO 2080 LDYHI 2090 JSR$FFBD;FILENAMEN VORBEREITEN 2100 LDA#00;LOAD-FLAG AUF 0 2101 STA$0A;UND MERKEN 2103 JMP$E16F;EINSPRUNG IN DIE 'LOAD'-ROUTINE 2200 ; 2340 ;ROUTINE PRUEFT BIT 6 DES BEFEHLBYTES 2345 ;UND SCHALTET BEI 1 DIE ROTE LED AM 2346 ;LAUFWERK AN. 2348 ; 2350 LED LDA#64 2360 ANDZ1;TEST AUF BIT 6 2380 BEQENDE;BEI 0 'RTS' 2390 LDX#08 2400 JSR$FFC9;CMD OUT AKTIVIEREN 2410 LDX#00 2420 B3 LDAT3,X 2430 JSR$FFD2 2440 INX 2450 CPX#05;5 BEFEHLBYTES 2460 BNEB3 2470 JSR$FFCC;CMD INAKTIVIEREN 2480 ENDE RTS;ENDE DES UNTERPROGRAMMS 2490 BIT05 LDA#32;TESTET BIT 5 DES BEFEHLBYTES 2500 ANDZ1 2530 BNEENDE;GESETZT,DANN DISKETTENWECHSEL 2540 PLA;NEIN, 2550 PLA;DANN STACK "SAEUBERN" 2560 JMPC;UND WEITER AUF DISKETTE WARTEN 2570 ; 2575 ;TABELLE VON ANWEISUNGEN UND (AKTUELLEN) 2576 ;ZWISCHENSPEICHERN 2580 ; 2610 T1 .TX"M-R";AUSLESEN DES DISKKONTROLLERS 2620 .BY00,28,1 ;DER FLOPPY (WEGEN LS) 2630 T2 .TX"M-E";FLOPPYMOTOR 2640 .BY71,198 ;EINSCHALTEN UND AUF 'READY' TESTEN 2644 T3 .TX"M-E";BEFEHLSSEQUENZ FUER 2646 .BY$18,$C1 ;LED AM LAUFWERK ANSCHALTEN 2650 T4 .TX"M-R";SCHON 'READY' ? 2660 .BY$FF,0,1 2670 Z1 .BY$00;PLATZ FUER BEFEHLSBYTE 2680 Z2 .BY$10;16 FUER 'AND' VERKNUEPFUNG (LS) 2700 Z4 .BY$00;SPEICHER FUER FILENAMENLAENGE 2705 Z5 .BY$00;ZAEHLER FUER WARTESCHLEIFE 2730 LO .BY$00;ZWISCHENSPEICHER FUER 2740 HI .BY$00;FILENAMENADRESSE